<?php

class ListaPreciosController extends AppController {

    var $name = 'ListaPrecios';
    var $uses = array('Tienda', 'ArchivoPrecios', 'ArticuloPrecios', 'Material', 'Lapso', 'TipoCliente', 'Programa');
    var $helpers = array('Html', 'Ajax', 'Javascript', 'Vista', 'Interfaz', 'Json');
    var $layout = "ajax";
    var $components = array('Utilitario', 'Interfaz', 'Vista', 'Query', 'Maestro', 'Util',/* ,'RequestHandler','DebugKit.Toolbar' */);

    function beforeFilter() {
        $this->validar();
    }

    public function index($busq = null) {
        $this->permisos_menu_individual('replica de precios'); ///BUSCA LOS PERMISOS QUE SE UTILIZARAN EN LA VISTA
        $busq = (strpos($busq, 'menuadmin') === false) ? $busq : null;
        $this->set('busq', $busq);
        $condiciones['ArchivoPrecios.id >'] = '0';
        $condiciones['ArchivoPrecios.estatus !='] = 0;
        $filtros = '';

        if (!empty($this->request->data))
            if (!empty($this->request->data)) {
                $filtros = $this->request->data;
                extract($filtros);
            }
        if (!empty($filtros) && isset($vent_filtro)) {
            $this->set('opciones', $this->serializador($filtros, 2));
            if (!empty($codigo))
                $condiciones['ArchivoPrecios.codigo ILIKE'] = "%$codigo%";
            if (!empty($nombre))
                $condiciones['Material.nombre ILIKE'] = "%$nombre%";
            if (!empty($estatus))
                $condiciones['Material.estatus'] = $estatus;
            if (!empty($tipoarticulos_id))
                $condiciones['Material.tipoarticulos_id'] = $tipoarticulos_id;
            if (!empty($subclasificacion_id))
                $condiciones['Material.subclasificacion_id'] = $subclasificacion_id;
        }
        $data = $this->ArchivoPrecios->find('all', array('conditions' => $condiciones, 'order' => 'ArchivoPrecios.id', 'limit' => MAX_PAGI));
        $mostrar = (count($data) > MAX_PAGI) ? MAX_PAGI : count($data);
        $this->set('data', $data);
        $this->Vista->title("Listado de Archivos de Replica de Precios");
        if (isset($vent_filtro))
            $this->Vista->cerrar_ventana($vent_filtro);
        $this->bloquear_buscador(2);
    }

    public function nuevo() {
        $this->permisos_accion_individual('replica de precios', 'nuevo'); // mensaje que se quiere mostrar
        $this->set('div', $div);
        $this->set('divlistado', $divlistado);

        $tiendas = $this->Session->read('tiendas_disponibles');
        $listaTiendas = $this->Maestro->listar_tienda_usuarios($tiendas);
        $listaTiendasPermitidas = $this->Util->tiendasActivas($listaTiendas);
        $this->set('tienda', $listaTiendasPermitidas);
    }

    public function upload_replica_de_precios($div = 'vista', $divlistado = 'vista') {
        $this->set('div', $div);
        $this->set('divlistado', $divlistado);
        $this->Vista->title('Subir Archivo Replica de Precios');
    }

    public function subir_replica_de_precios() {
        $this->Vista->title('Subir Archivos Replica de Precios');
        $this->bloquear_buscador();
    }

    public function cargar_precios_archivos() {
        $this->request->data['ruta'] = ROOT . DS . WEBROOT_DIR . DS . "files" . DS;
        $opciones = $this->serializador($this->request->data, 2); //2 serializa el arreglo
        $this->set('opciones', $opciones);
        $data = $this->request->data;
        extract($this->request->data);
        $id_ven = $this->request->data['vent'];
        $fi = $this->request->data['fecha_i'];
        $vfi = $$fi;
        $ff = $this->request->data['fecha_f'];
        $vff = $$ff;

        $error = 0;
        if ($tipo == 1) {
            if ($this->Vista->empyt($data, array('hfin', $ff))) {
                $error = 1;
            }
        } else if ($tipo == 2) {
            if ($this->Vista->empyt($data)) {
                $error = 1;
            }
        } else {
            if ($this->Vista->empyt($data)) {
                $error = 1;
            }
        }
        if ($error == 1) {
            $this->Vista->mensaje('Faltan Datos que son Requeridos', 'ALERTA');
            $this->set('tienda', null);
            $this->set('data', null);
            $this->set('busq', '');
            $this->set('archivo', null);
            $this->set('busq', '');
            $this->set('ruta', null);
        } else {
            if (empty($vfi) and empty($vff)) {
                $vfi = null;
                $vff = null;
            } else if (!empty($vfi) and empty($vff)) {
                $vfiv = $vfi;
                $vffv = $vfi;
                $vfi = $this->Utilitario->guar_fecha($vfi);
                $vff = $vfi;
            } else if (empty($vfi) and !empty($vff)) {
                $vfiv = $vff;
                $vffv = $vff;
                $vff = $this->Utilitario->guar_fecha($vff);
                $vfi = $vff;
            } else {
                $vfiv = $vfi;
                $vffv = $vff;
                $vfi = $this->Utilitario->guar_fecha($vfi);
                $vff = $this->Utilitario->guar_fecha($vff);
            }
            if ($tipo == 2) {
                if (in_array('TODOS', $this->request->data['tienda'])) {
                    $error = 1;
                    $msj = "Las Replica de Contingencia no puede aplicar a todas las tienda";
                } else {
                    $fhi = "$vfiv $hinicio";
                    $fhf = "$vffv $hfin";
                    $f1 = strtotime($fhi);
                    $f2 = strtotime($fhf);
                    //echo "$fhi = > $f2<br />$fhf $f1<br />";
                    if ($f2 - $f1 < 120) {
                        $error = 1;
                        $msj = "Las fechas son incorrectas";
                    }
                }
            }

            $td = $this->Tienda->find('list', array('fields' => array('Tienda.codigo', 'Tienda.nombre'), 'order' => 'Tienda.id Asc'));
            $array = $this->request->data['tienda'];
            if ($error == 1) {
                $this->Vista->mensaje($msj, 'ALERTA');
                $this->set('tienda', null);
                $this->set('data', null);
                $this->set('busq', '');
                $this->set('archivo', null);
                $this->set('busq', '');
                $this->set('ruta', null);
                $this->set('id_formulario', null);
            } else {
                $this->set('tienda_listado', $td);
                $this->set('tienda', $array);
                $this->set('fecha_i', $vfi);
                $this->set('hinicio', $data['hinicio']);
                $this->set('fecha_f', $vff);
                $this->set('hfin', $data['hfin']);
                $this->set('tipo', $data['tipo']);
                $this->set('archivo', $data['archivo']);
                $this->set('id_formulario', $id_formulario);
                $this->set('busq', '');
                $this->set('ruta', ROOT . DS . WEBROOT_DIR . DS . "files" . DS);
                $ad = 'files/' . $archivo;
                chmod('files/' . $archivo, 0777);
                $this->Vista->title('Listado de Precios a Replicar');
            }
        }
    }
    
    public function ver_detalles_error($tipo) {
        if ($tipo == 1) {
            $errores = $this->Session->read('errores_precios');
            $titulo = 'Errores En El Archivo';
        } else {
            $errores = $this->Session->read('precios_omitidos');
            $titulo = 'Precios que se Omitiran';
        }
        $this->set('errores', $errores);
        $this->set('titulo', $titulo);
    }
    
    public function guardar_lista_precio() {
        $this->permisos_accion_individual('replica de precios', 'nuevo');
        $data = $this->serializador($this->request->data['opciones'], 1); //1 convierte la cadena serializada en un arreglo
        extract($data);
        $fi = $data['fecha_i'];
        $vfi = $f_precio = $this->Utilitario->guar_fecha($$fi);
        $ff = $data['fecha_f'];
        $arch = $data['ruta'] . $data['archivo'];
        $fi = $vfi . ' ' . $data['hinicio'];
        if (!empty($$ff)) {
            $vff = $this->Utilitario->guar_fecha($$ff);
            $ff = $vff . ' ' . $data['hfin'];
        } else {
            $ff = null;
        }
        if (in_array('TODOS', $data['tienda'])) {
            $tiendas_final = 'TODOS';
            $tiendas_for = 'TODOS';
        } else {
            $tiendas_final = implode(",", $data['tienda']);
            $tiendas_for = $data['tienda'];
        }
        //$oid = $this->ArchivoPrecios->importar($arch);
        $nom_nue = str_replace("_", " ", $data['archivo']);
        $nom_nue = explode(' ', $nom_nue);
        unset($nom_nue[0]);
        $nom_nue = implode(' ', $nom_nue);
        $codigos_finales_array = $this->serializador($this->request->data['codigos_finales_array'], 1);
        $codigos_validados = $this->Material->find('count', array('conditions' => array('Material.codigo' => $codigos_finales_array)));
        if (count($codigos_finales_array) == $codigos_validados) {
            if ($data['tipo'] == 1) {
                $tiplista = 'N';
                $tiendas_final = 'TODOS';
                $tiendas_for = 'TODOS';
            } else {
                $tiplista = 'C';
            }            
            $this->ArchivoPrecios->query('BEGIN  WORK');
            $datosArchivos['ArchivoPrecios']['nombre'] = $nom_nue;
            $datosArchivos['ArchivoPrecios']['nombre_fuente'] = $data['archivo'];
            $datosArchivos['ArchivoPrecios']['estado'] = 'N';
            $datosArchivos['ArchivoPrecios']['fecinicio'] = $fi;
            $datosArchivos['ArchivoPrecios']['fecfin'] = $ff;
            $datosArchivos['ArchivoPrecios']['tiendas'] = $tiendas_final;
            $datosArchivos['ArchivoPrecios']['tipo'] = $tiplista;
            $datosArchivos['ArchivoPrecios']['usuario_id'] = $this->Interfaz->id($this->Session->read('usuario_id'));
            $ban = 0;
            if ($this->ArchivoPrecios->save($datosArchivos)) {
                $ban = 1;
                $id_archivo = $this->ArchivoPrecios->id;
                $datapre = $this->serializador($this->request->data['datos'], 1); //1 convierte la cadena serializada en un arreglo
                if (is_array($datapre) and count($datapre) > 0) {
                    $campoLapzo = $this->Lapso->find('list', array('fields' => array('Lapso.dias', 'Lapso.campo_dato'), 'conditions' => array('Lapso.estatus' => 1)));
                    $idsLapzo = $this->Lapso->find('list', array('fields' => array('Lapso.dias', 'Lapso.id'), 'conditions' => array('Lapso.estatus' => 1)));
                    $idsPrograma = $this->Programa->find('list', array('fields' => array('Programa.codigo', 'Programa.id'), 'conditions' => array('Programa.estatus' => 1)));
                    $idsCliente = $this->TipoCliente->find('list', array('fields' => array('TipoCliente.codigo_sigesp', 'TipoCliente.id'), 'conditions' => array('TipoCliente.estatus' => 1)));                    
                    $idsMaterial = $this->Material->find('list', array('fields' => array('Material.codigo', 'Material.id'),'conditions' => array('Material.codigo' => $codigos_finales_array)));
                    foreach (@$datapre as $valor) {
                        foreach (@$valor as $linea) {
                            if ($linea['error_msg'] == 1) {
                                $lapzo_id = $idsLapzo[$linea['lapzo']];
                                if (isset($lapzo_id) && $lapzo_id > 0) {
                                    $lapzo_campo = $campoLapzo[$linea['lapzo']];
                                    $pre_aux = $this->Material->query("select fnc_buscar_precio_central({$idsCliente[$linea['cliente']]}, {$idsPrograma[$linea['programa']]}, {$idsMaterial[$linea['codigo']]}, '{$lapzo_campo}', '{$f_precio}') as precio");
                                    $d = NULL;
                                    $d['ArticuloPrecios']['archivo_precios_id'] = $id_archivo;
                                    $d['ArticuloPrecios']['material_id'] = $idsMaterial[$linea['codigo']];
                                    $d['ArticuloPrecios']['tipo_cliente_id'] = $idsCliente[$linea['cliente']];
                                    $d['ArticuloPrecios']['lapso_id'] = $lapzo_id;
                                    $d['ArticuloPrecios']['programa_id'] = $idsPrograma[$linea['programa']];
                                    $d['ArticuloPrecios']['precio'] = round($linea['precio'],2);                                    
                                    $d['ArticuloPrecios']['precio_antiguo'] = $pre_aux[0][0]['precio'];
                                    $d['ArticuloPrecios']['stareg'] = 'N';
                                    if ($this->ArticuloPrecios->saveall($d)) {
                                        $ban *= 1;
                                    } else {
                                        $ban = 0;
                                        break;
                                    }
                                }
                            }
                        }
                    }
                }
            } else {
                $this->ArchivoPrecios->query('ROLLBACK');
            }
            if ($ban == 1) {
                $this->ArchivoPrecios->query('COMMIT');
                $this->Vista->mensaje('Archivo Subido Exitosamente', 'Exito');           
                //$this->log();
                $this->Vista->cerrar_ventana($vent);
            } else {
                $this->ArchivoPrecios->query('ROLLBACK');
                $this->Vista->mensaje('Ocurrio un error al Subir el Archivo', 'ALERTA');
            }
        } else {
            $this->Vista->mensaje('Al menos un Codigo de Articulo no existe, por favor Verifica!!!', 'error');
        }
        $this->index();
        $this->render("index");
    }
    
    function ver($id_archivo = null) {        
        $this->permisos_opcion_individual('replica de precios', 'estatus', 'ver');
        if (isset($id_archivo)) {
            $id_archivo = $this->Interfaz->id($id_archivo);
            $this->Vista->title('Listado de Replica de Precios');
            $dat = $this->ArchivoPrecios->find('first', array('conditions' => array('ArchivoPrecios.id' => $id_archivo)));
            $this->set('data_archivo', $dat);
            $sql = "SELECT m.id AS idmat, m.codigo AS codart, p.id AS idpro, p.codigo AS codpro FROM articulo_precios ap INNER JOIN materials m ON ap.material_id = m.id INNER JOIN programas p ON ap.programa_id = p.id WHERE ap.archivo_precios_id = '$id_archivo' GROUP BY 1,2,3,4 ORDER BY m.codigo";
            $articulos = $this->ArchivoPrecios->query($sql);
            $sql = "SELECT l.id AS idlap, l.dias AS codlapso, t.id AS idcli, t.codigo_sigesp AS codtipocli FROM articulo_precios ap INNER JOIN lapsos l ON ap.lapso_id = l.id INNER JOIN tipo_clientes t ON ap.tipo_cliente_id = t.id WHERE ap.archivo_precios_id = '$id_archivo' GROUP BY 1,2,3,4 ORDER BY l.dias, t.codigo_sigesp";
            $precios = $this->ArchivoPrecios->query($sql);
            $precios_final = array();
            for ($y = 0; $y < count($precios); $y++) {
                $precios_final[$y][0]['codlapso'] = $precios[$y][0]['codlapso'];
                $precios_final[$y][0]['codtipocli'] = $precios[$y][0]['codtipocli'];
                $precios_final[$y][0]['idlap'] = $precios[$y][0]['idlap'];
                $precios_final[$y][0]['idcli'] = $precios[$y][0]['idcli'];
            }
            $datos = array();
            for ($i = 0; $i < count($articulos); $i++) {
                $codi = $articulos[$i][0]['codart'];
                $codp = $articulos[$i][0]['codpro'];
                $idmat =  $articulos[$i][0]['idmat'];
                $idpro =  $articulos[$i][0]['idpro'];
                for ($j = 0; $j < count($precios); $j++) {
                    $lapzo = $precios[$j][0]['idlap'];
                    $cli = $precios[$j][0]['idcli'];
                    $sql = "SELECT m.codigo as codart, t.codigo_sigesp as codtipocli, p.codigo as codpro, ap.precio FROM articulo_precios ap INNER JOIN materials m ON m.id = ap.material_id INNER JOIN programas p ON p.id = ap.programa_id INNER JOIN lapsos l ON l.id = ap.lapso_id INNER JOIN tipo_clientes t ON t.id = ap.tipo_cliente_id WHERE ap.archivo_precios_id='$id_archivo' AND ap.programa_id='$idpro' AND ap.material_id='$idmat' AND ap.lapso_id='$lapzo' AND ap.tipo_cliente_id='$cli' limit 1";
                    $res = $this->ArchivoPrecios->query($sql);
                    if (!isset($res[0][0])) {
                        $res[0][0]['codart'] = null;
                        $res[0][0]['codtipocli'] = null;
                        $res[0][0]['codlapso'] = null;
                        $res[0][0]['codpro'] = null;
                        $res[0][0]['precio'] = null;
                    }
                    $datos[$i][$j] = $res[0][0];
                }
            }	
            $this->set('precios', $precios_final);
            $this->set('data', $datos);
            $this->set('busq', '');
            //$this->log();
        } else {
            $this->set('data_archivo', null);
            $this->set('data', null);
            $this->set('busq', '');
        }
    }
    
    function bajar_archivo($archivo, $nombre) {
        if (!empty($archivo)) {
            $nombre = str_replace(" ", "_", $nombre);
            $this->set('ruta', ROOT . DS . WEBROOT_DIR . DS . "files" . DS . $archivo);
            $this->set('nombre', $nombre);
        } else {
            $this->set('ruta', null);
            $this->set('nombre', null);
        }
    }
    
    function comparar($id_archivo = null) {        
        $this->permisos_opcion_individual('replica de precios', 'estatus', 'modificar');
        if (isset($id_archivo)) {
            $id_archivo = $this->Interfaz->id($id_archivo);
            $this->Vista->title('Listado de Replica de Precios');
            $dat = $this->ArchivoPrecios->find('first', array('conditions' => array('ArchivoPrecios.id' => $id_archivo)));
            $this->set('data_archivo', $dat);
            $sql = "SELECT m.id AS idmat, m.codigo AS codart, p.id AS idpro, p.codigo AS codpro FROM articulo_precios ap INNER JOIN materials m ON ap.material_id = m.id INNER JOIN programas p ON ap.programa_id = p.id WHERE ap.archivo_precios_id = '$id_archivo' GROUP BY 1,2,3,4 ORDER BY m.codigo";
            $articulos = $this->ArchivoPrecios->query($sql);
            $sql = "SELECT l.id AS idlap, l.dias AS codlapso, t.id AS idcli, t.codigo_sigesp AS codtipocli FROM articulo_precios ap INNER JOIN lapsos l ON ap.lapso_id = l.id INNER JOIN tipo_clientes t ON ap.tipo_cliente_id = t.id WHERE ap.archivo_precios_id = '$id_archivo' GROUP BY 1,2,3,4 ORDER BY l.dias, t.codigo_sigesp";
            $precios = $this->ArchivoPrecios->query($sql);
            $precios_final = array();
            for ($y = 0; $y < count($precios); $y++) {
                $precios_final[$y][0]['codlapso'] = $precios[$y][0]['codlapso'];
                $precios_final[$y][0]['codtipocli'] = $precios[$y][0]['codtipocli'];
                $precios_final[$y][0]['idlap'] = $precios[$y][0]['idlap'];
                $precios_final[$y][0]['idcli'] = $precios[$y][0]['idcli'];
            }
            $datos = array();
            for ($i = 0; $i < count($articulos); $i++) {
                $codi = $articulos[$i][0]['codart'];
                $codp = $articulos[$i][0]['codpro'];
                $idmat =  $articulos[$i][0]['idmat'];
                $idpro =  $articulos[$i][0]['idpro'];
                for ($j = 0; $j < count($precios); $j++) {
                    $lapzo = $precios[$j][0]['idlap'];
                    $cli = $precios[$j][0]['idcli'];
                    $sql = "SELECT m.codigo as codart, t.codigo_sigesp as codtipocli, p.codigo as codpro, ap.precio, ap.precio_antiguo FROM articulo_precios ap INNER JOIN materials m ON m.id = ap.material_id INNER JOIN programas p ON p.id = ap.programa_id INNER JOIN lapsos l ON l.id = ap.lapso_id INNER JOIN tipo_clientes t ON t.id = ap.tipo_cliente_id WHERE ap.archivo_precios_id='$id_archivo' AND ap.programa_id='$idpro' AND ap.material_id='$idmat' AND ap.lapso_id='$lapzo' AND ap.tipo_cliente_id='$cli' limit 1";
                    $res = $this->ArchivoPrecios->query($sql);
                    if (!isset($res[0][0])) {
                        $res[0][0]['codart'] = null;
                        $res[0][0]['codtipocli'] = null;
                        $res[0][0]['codlapso'] = null;
                        $res[0][0]['codpro'] = null;
                        $res[0][0]['precio'] = null;
                        $res[0][0]['precio_antiguo'] = null;
                    }
                    $datos[$i][$j] = $res[0][0];
                }
            }	
            $this->set('precios', $precios_final);
            $this->set('data', $datos);
            $this->set('busq', '');
            //$this->log();
        } else {
            $this->set('data_archivo', null);
            $this->set('data', null);
            $this->set('busq', '');
        }
    }
    
    function anular($id_archivo = null) {        
        $this->permisos_opcion_individual('replica de precios', 'estatus', 'anular');
        if (isset($id_archivo)) {
            $id_archivo = $this->Interfaz->id($id_archivo);
            $dat = $this->ArchivoPrecios->find('first', array('conditions' => array('ArchivoPrecios.id' => $id_archivo, 'ArchivoPrecios.estado' => 'N')));
            if (count($dat) > 0) {
                $sql = "UPDATE archivo_precios set estado='A', estatus='4' where id=$id_archivo";
                $this->ArchivoPrecios->Query($sql);
                //$this->log();
                $this->Vista->mensaje('Archivo Anulado Exitosamente', 'Exito');
            } else {
                $this->Vista->mensaje('No se encontro el Archivo Para Anular', 'Error');
            }
        }
        $this->index();
        $this->render("index");
    }

}

//class
?>
